package object2;

/**
 * 方法重写练习
 */
public class OverrideExercise {

    public static void main(String[] args) {

        /*
            名称      发生范围        方法名         形参列表                    返回类型                                    修饰符
            重载      本类           必须一样       类型、个数或顺序至少一个不同    无要求                                     无要求
            重写      父子类         必须一样        相同                        子类返回的类型与父类一致或为父类的子类          子类方法不能缩小父类方法的访问范围
         */

        /*
            1) 编写一个Per类，包括属性/private（name、age），构造器、方法say(返回自我介绍的字符串）。
            2) 编写一个Stu类，继承Per类，增加id、score属性/private，以及构造器，定义say方法(返回自我介绍的信息)。
            3) 在main中,分别创建Per和Stu对象，调用say方法输出自我介绍
         */
        Per per = new Per("张三", 30);
        System.out.println(per.say());

        Stu stu = new Stu("李四", 20, "010", 80.0);
        System.out.println(stu.say());
    }
}

class Per {

    private String name;

    private int age;

    public Per() {
    }

    public Per(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String say() {
        return "name: " + name + ", age: " + age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}


class Stu extends Per {

    private String id;

    private double score;

    public Stu() {
    }

    public Stu(String name, int age, String id, double score) {
        super(name, age);
        this.id = id;
        this.score = score;
    }

    public String say() {
        String str = super.say();
        return str + ", id: " + id + ", score: " + score;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public double getScore() {
        return score;
    }

    public void setScore(double score) {
        this.score = score;
    }
}